﻿using System;
using System.Collections.Generic;
using System.Reflection;

namespace Natural.Model
{
    public class ImplementInfo
    {
        public string Name { get; set; }
        public int Priority { get; set; }
        public string TypeName { get; set; }
        public object Instance { get; set; }
        public object DecoratedInstance { get; set; }
    }
    public class ProviderInfo
    {
        public string Name { get; set; }
        public ImplementInfo Defualt { get; set; }
        public List<ImplementInfo> Strategies { get; set; }
        public List<ImplementInfo> Decorators { get; set; }
    }
    public class ActionInfo
    {
        public string Name { get; set; }
        public ImplementInfo Defualt { get; set; }
        public List<ImplementInfo> Strategies { get; set; }
        public List<ImplementInfo> Decorators { get; set; }
        public List<ImplementInfo> Observers { get; set; }
    }
    public class EntityInfo 
    {
        public bool IsRoot { get; set; }
        public string Name { get; set; }
        public string TypeName { get; set; }
        public Dictionary<string, ActionInfo> Actions { get; set; }
    }    
    public class RuntimeInfo
    {
        public Dictionary<string, ProviderInfo> Providers { get; set; }
        public Dictionary<string, ActionInfo> Actions { get; set; }
        public Dictionary<string, EntityInfo> Entities { get; set; }        
    }
}
